package helpers;

import interfaces.ProdutoInterface;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import java.util.TreeMap;

import loja.Produto;

public class Logger {

	public static final String RELATORIOADICAO = "Relatorio de Adicao.txt";
	public static final String RELATORIOLOGCLIENTES = "Relatorio de Logs de Clientes.txt";
	public static final String RELATORIOLOGSERVIDOR = "Relatorio de Logs do Servidor.txt";
	public static final String RELATORIOVENDAS = "Relatorio de Vendas.txt";
	public static final String RELATORIOERROS = "Relatorio de Erros.txt";

	private static void printlnRA(String s) { // RA - Relatorio Adicao

		File f = new File(RELATORIOADICAO);

		try {
			@SuppressWarnings("unused")
			FileReader fr = new FileReader(f);

		} catch (IOException ioe) {
			try {
				FileWriter fw = new FileWriter(f);
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} finally {
			try {
				FileWriter fw = new FileWriter(f, true);
				fw.write(s);
				fw.write("\n");
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void printlnRLC(String s) { // RLC - Relatorio Logs Clientes

		File f = new File(RELATORIOLOGCLIENTES);

		try {
			@SuppressWarnings("unused")
			FileReader fr = new FileReader(f);
		} catch (IOException ioe) {
			try {
				FileWriter fw = new FileWriter(f);
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} finally {
			try {
				FileWriter fw = new FileWriter(f, true);
				fw.write(s);
				fw.write("\n");
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void printlnRLS(String s) { // RLS - Relatorio Logs Servidor

		File f = new File(RELATORIOLOGSERVIDOR);

		try {
			@SuppressWarnings("unused")
			FileReader fr = new FileReader(f);
		} catch (IOException ioe) {
			try {
				FileWriter fw = new FileWriter(f);
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} finally {
			try {
				FileWriter fw = new FileWriter(f, true);
				fw.write(s);
				fw.write("\n");
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void printlnRV(String s) { // RV - Relatorio de Vendas

		File f = new File(RELATORIOVENDAS);

		try {
			@SuppressWarnings("unused")
			FileReader fr = new FileReader(f);
		} catch (IOException ioe) {
			try {
				FileWriter fw = new FileWriter(f);
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} finally {
			try {
				FileWriter fw = new FileWriter(f, true);
				fw.write(s);
				fw.write("\n");
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void printlnERR(String s) { // ERR - Relatorio de Erros

		File f = new File(RELATORIOERROS);

		try {
			@SuppressWarnings("unused")
			FileReader fr = new FileReader(f);
		} catch (IOException ioe) {
			try {
				FileWriter fw = new FileWriter(f);
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} finally {
			try {
				FileWriter fw = new FileWriter(f, true);
				fw.write(s);
				fw.write("\n");
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void adicionaCliente(String login) {
		Date d = new Date();
		printlnRA(d + " - Cliente " + login + " foi adicionado.");
	}

	public static void adicionaProduto(String produto) {
		Date d = new Date();
		printlnRA(d + " - Produto " + produto + " foi adicionado.");
	}

	public static void loginCliente(String login) {
		Date d = new Date();
		printlnRLC(d + " - Cliente " + login + " efetuou login.");
	}

	public static void logoutCliente(String login) {
		Date d = new Date();
		printlnRLC(d + " - Cliente " + login + " efetuou logout.");
	}

	public static void loginServidor() {
		Date d = new Date();
		printlnRLS(d + " - Servidor foi ligado.");
	}

	public static void logoutServidor() {
		Date d = new Date();
		printlnRLS(d + " - Servidor foi desligado.");
	}

	public static String leArquivo(String arquivo) {

		try {
			BufferedReader ler = new BufferedReader(new FileReader(arquivo));
			String linha = null;
			String log = "";
			while ((linha = ler.readLine()) != null) {
				log += linha + "\n";
			}
			return log;
		} catch (IOException ioe) {
			return null;
		}
	}

	public static void executaVenda(String login,
			TreeMap<ProdutoInterface, Integer> treeMapProduto, double total) {
		Date d = new Date();
		printlnRV(d + "- Cliente " + login + " comprou:");
		Iterator<ProdutoInterface> it = treeMapProduto.keySet().iterator();
		Produto produto;
		while (it.hasNext()) {
			produto = (Produto) it.next();
			Integer qnt = treeMapProduto.get(produto);
			printlnRV("    -Produto: " + produto.toString() + ", Quantidade: "
					+ qnt + ", SubTotal: RS" + produto.getValorVenda() * qnt
					+ ".");
		}
		printlnRV("\n    -Total: RS" + total + ".\n\n\n");
	}

	public static void erro(String s) {
		Date d = new Date();
		printlnERR(d + " - Erro: " + s);
	}

	private Logger() {
	}
}
